<?php

namespace Modules\Shop\Entities;

use Illuminate\Database\Eloquent\Model;
use houdunwang\arr\Arr;
class Category extends Model
{
    //protected $fillable = [];
    //设置不允许批量填充的字段数据,那么没再数组内的就都允许
    protected $guarded = [];

    //模型关联 多对一的关系
    public function classification(){
        //第一个参数 被关联模型
        //第二个参数 外键 这里是反相关联 内键外键要替换
        //第三个参数 内键
        return $this->belongsTo(Category::class,'pid','id');

    }

    //获取树状结构

    public static function getTreeCategory($cate = null){
        //获取分类所有数据
        //调用当前
        $tree = self::get();

        //判断$cate是否为NULL，如果不为null，就代表着我使用该方法的时候传递一个分类的数据对象进来
        if (!is_null($cate)){
           foreach ($tree as $k => $v){
              //找到当前修改的分类的父级数据，给父级加上选中效果
               $tree[$k]['_selected'] = $cate['pid'] == $v['id'];
               //dd($tree);
               //修改的时候，自己不能选择自己作为自己的父级，所以因该在所有数据中，找到当前修改的数据，然后加上不可能属性
               $tree[$k]['_disabled'] = $cate['id'] == $v['id'] || Arr::isChild( $tree,$v['id'], $cate['id'], 'id', 'pid');

           }


        }

      $category =   Arr::tree($tree ? $tree->toArray():[], 'cname',  'id','pid');
        //参数                   说明
        //$data                 	必须是一个数组
        //$title                	需要处理的字段名称
        //$fieldPri             	当前主键 id
        //$fieldPid             	当前父级 id

        return $category;
    }


    /**
     * 判断是否有子集
     * @param $cate
     * @return mixed
     */
    public function hasChild($cate){
        //获取所有分类数据
        $tree = self::get();
        //如果有子集，返回真，如果没有子集返回假
        //参数一：操作的数组
        //参数二：需要操作的分类id
        //参数三：父级id键名
        return Arr::hasChild($tree,$cate['id'],'pid');

    }





}
